package com.fengyun.scala

/**
 * @author Hanpeng
 * @date 2021/1/28 21:05
 * @description: 有一个参数的function
 */
object TestFunction1 {
  def main(args: Array[String]): Unit = {
    //        入参类型 返回值类型 入参值
    //带一个参数的方法，声明时，它需要两个泛型参数，第一个是传入的数据类型，第二个表示返回的数据类型
    //必须实现 apply方法
    val succ: Int =>  Double = (x: Int) => {123.3}
    println(succ(12));
    val anonfun1 = new Function1[Int, Double] {
      override def apply(v1: Int): Double = 123.3
    }
    val anonfun12 = new Function1[Int, Int] {
      override def apply(x: Int): Int = x + 1
    }
    //andThen 组合两个实例Function1成为一个新的Function1 先调用succ11 参数为(5) 计算结果作为funs11的参数
    val funs11 = new Function1[Int,Int] {
      def apply(x:Int) = {
        println("第一步:"+x)
        x + 1
      }
    }
    val succ11 = (x: Int) => {
      println("第二步:"+x)
      x + 3
    }
    println(succ11.andThen(funs11).apply(5))
    /**
    第二步:5
    第一步:8
     */
    //compose 与 andThen相反
    println(succ11.compose(funs11).apply(5))
  }
}
